package com.liliudong.template.common.dto.sys;

import cn.hutool.core.util.StrUtil;
import com.liliudong.template.common.constant.ExMessageEnum;
import com.liliudong.template.common.constant.SysMenuTypeEnum;
import com.liliudong.template.common.constant.SysMenuVisibleEnum;
import com.liliudong.template.common.exception.BizException;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.Objects;

/**
 * @author ldli5
 * @classname SysMenuAddOrUpdateDTO
 * @date 2024/6/20-16:53
 */
@Data
public class SysMenuAddOrUpdateDTO {

	/**
	 * 组件路径 相对路径是 views
	 */
	private String component;

	/**
	 * 图标
	 */
	private String icon;

	/**
	 * 名称
	 */
	@NotBlank(message = "名称不能为空")
	private String name;

	/**
	 * 父级ID
	 */
	@NotNull(message = "父级ID不能为空")
	private Long parentId;

	/**
	 * 权限标识符
	 */
	@NotBlank(message = "权限标识符不能为空")
	private String permission;

	/**
	 * 排序
	 */
	@NotNull(message = "排序不能为空")
	private Integer sort;

	/**
	 * 类型 1 目录 2菜单 3按钮
	 */
	@NotNull(message = "类型不能为空")
	private SysMenuTypeEnum type;

	/**
	 * 可见的 1可见 0隐藏
	 */
	private SysMenuVisibleEnum visible = SysMenuVisibleEnum.VISIBLE;

	/**
	 * 参数检查
	 */
	public void paramsCheck() {
		// 校验 目录和菜单ICON不能为空
		if (Objects.equals(this.getType(), SysMenuTypeEnum.CATALOG) ||
				Objects.equals(this.getType(), SysMenuTypeEnum.MENU)) {
			if (StrUtil.isBlank(this.getIcon())) {
				throw new BizException(ExMessageEnum.SYS_MENU_ICON_EMPTY);
			}
		}
		// 菜单类型为菜单时，组件路径不能为空
		if (Objects.equals(this.getType(), SysMenuTypeEnum.MENU) &&
				StrUtil.isBlank(this.getComponent())) {
			throw new BizException(ExMessageEnum.SYS_MENU_COMPONENT_EMPTY);
		}
	}
}
